//
//  LDTCycleView.m
//  CycleScrollViewDemo
//
//  Created by lanou3g on 16/4/19.
//  Copyright © 2016年 浮夸. All rights reserved.
//

#import "LDTCycleView.h"

@interface LDTCycleView ()<UIScrollViewDelegate>
///父视图
@property(nonatomic,strong)UIScrollView *imgScrollView;
///下面的页脚
@property(nonatomic,strong)UIPageControl *imgPageControl;
///图片View的数组
@property(nonatomic,strong)NSMutableArray *imgViewArray;
///存放图片的数组
@property(nonatomic,strong)NSMutableArray *imgArray;
///当前展示的图片下标
@property(nonatomic,assign)NSInteger index;
///定时器
@property(nonatomic,strong)NSTimer *imgTimer;
///点击回调block
@property(nonatomic,copy)void(^tapBlock)(NSInteger index);
///时间间隔
@property(nonatomic,assign)NSTimeInterval interVal;


@end


@implementation LDTCycleView

- (instancetype)initWithFrame:(CGRect)frame InterVal:(NSTimeInterval)interVal
{
    self = [super initWithFrame:frame];
    if (self) {
        self.imgViewArray = [NSMutableArray new];
        self.imgArray     = [NSMutableArray new];
        self.imgScrollView = [[UIScrollView alloc]initWithFrame:self.bounds];
        self.imgScrollView.contentSize = CGSizeMake(frame.size.width * 3, frame.size.height);
        
        self.imgScrollView.pagingEnabled = YES;
        self.imgScrollView.showsHorizontalScrollIndicator = NO;
        self.imgScrollView.delegate = self;
        
        [self addSubview:self.imgScrollView];
        
        for (int i =0; i<3; i++) {
            UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(frame.size.width * i, 0, frame.size.width, frame.size.height)];
            //添加到父视图.数组
            [self.imgScrollView addSubview:imgView];
            [self.imgViewArray addObject:imgView];
            
        }
        self.interVal = interVal;
       
    }
    
   
    return self;
}

//图片滚动的方法
- (void)timerAction
{
    [self.imgScrollView setContentOffset:CGPointMake(self.imgScrollView.frame.size.width * 2, 0) animated:YES];
    //改变index
    self.index = (self.index + 1) % self.imgNameArray.count;
   
}
//滚动动画结束
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    //回位
    [self.imgScrollView setContentOffset:CGPointMake(scrollView.frame.size.width, 0) animated:NO];
    [self layoutImages];
}


#pragma mark - 图片名数组setter

- (void)setImgNameArray:(NSMutableArray *)imgNameArray
{
    if (_imgNameArray != imgNameArray) {
        _imgNameArray = imgNameArray;
        //设置圆点
        [self.imgPageControl removeFromSuperview];
        self.imgPageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, self.frame.size.height - 40, self.frame.size.width, 40)];
        [self addSubview:self.imgPageControl];
        //圆点属性
        self.imgPageControl.currentPage = 0;
        self.imgPageControl.numberOfPages = _imgNameArray.count;
        self.imgPageControl.enabled = NO;
        
        for (int i = 0; i<imgNameArray.count; i++) {
            
           // UIImage *img = [UIImage imageNamed:imgNameArray[i]];
            UIImage *img = imgNameArray[i];
            
            [self.imgArray addObject:img];
            
            if (i < 3) {
                
                [self.imgViewArray[i] setImage:img];
            }
        }
        
        //设置当前偏移量
        [self.imgScrollView setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
        self.index = 0;
        [self layoutImages];
        //点击手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapCycleViewAction:)];
      
        [self.imgViewArray[1] addGestureRecognizer:tap];
        //打开交互
        [self.imgViewArray[1] setUserInteractionEnabled:YES];
    }
    
    
    //初始化timer
    if (self.interVal <= 0 ) {
        
        self.imgTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
    }else{
        
        self.imgTimer = [NSTimer scheduledTimerWithTimeInterval:self.interVal target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
    }

    
}

- (void)tapCycleViewAction:(UITapGestureRecognizer *)sender
{
    if (self.tapBlock) {
        self.tapBlock(self.index);
    }
}


#pragma mark -UIScrollViewDelegate代理方法

static CGFloat x = 0;
//滑动开始
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
    x = scrollView.contentOffset.x;
    [self.imgTimer setFireDate:[NSDate distantFuture]];
    
}
//滑动结束
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    if (x > scrollView.contentOffset.x) {
        
        [self panToLeft:NO Index:self.index];
        
    }else if (x < scrollView.contentOffset.x){
        
        [self panToLeft:YES Index:self.index];
        
    }
    [self.imgTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:2]];
}

#pragma mark - 向左滑动,向右滑动结束切换

- (void)panToLeft:(BOOL)left Index:(NSInteger)index
{
    if (!left) {
        self.index = (index -1 + self.imgNameArray.count) % self.imgNameArray.count;
    }else{
        self.index = (index + 1)% self.imgNameArray.count;
    }
    
    //切换图片
    [self layoutImages];
    
    
    //回位操作
    [self.imgScrollView setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
}

- (void)layoutImages
{
    for (int i = 0; i < 3; i++) {
        [self.imgViewArray[i] setImage:self.imgArray[(self.index -1 + i + self.imgNameArray.count)% self.imgNameArray.count]];
    }
}

//重写index的setter方法
- (void)setIndex:(NSInteger)index
{
    if (_index != index) {
        _index = index;
        self.imgPageControl.currentPage = index;
    }
}


- (void)addTapBlock:(void (^)(NSInteger))block
{
    self.tapBlock = block;
}



@end
